课程主页:https://see.stanford.edu/Course/EE263

这次回顾EE263作业3。

2.17

(a)因为

所以

因此

(b)因为

所以

因此

(c)由$A^T=A$和上一题可得

3.13

对于行满秩矩阵$A\in \mathbb R^{m\times n}$,如果$A^T $的$QR$分解为

其中$R​$可逆,取

那么

(a)此时只要计算

的右逆$B_1$,然后对$B_1$的第二行插入$0$即可,注意$A_1$依然行满秩,所以仍然存在右逆,编写程序后得到:

import numpy as np

A = np.array([
        [-1, 0, 0, -1, 1],
        [0, 1, 1, 0, 0],
        [1, 0, 0, 1, 0]
        ])
n, m = A.shape

#### (a)
A1 = np.c_[A[:, 0], A[:, 2:]]
#QR分解
Q, R = np.linalg.qr(A1.T)
#计算右逆
B1 = Q.dot(np.linalg.inv(R.T))
#计算最终结果
B = np.r_[B1[0, :], np.zeros(n)].reshape(2, n)
B = np.r_[B, B1[1:, :]]
print(B)
#验证结果
print(A.dot(B))
[[9.72785220e-18 0.00000000e+00 5.00000000e-01]
 [0.00000000e+00 0.00000000e+00 0.00000000e+00]
 [0.00000000e+00 1.00000000e+00 0.00000000e+00]
 [1.91026513e-16 0.00000000e+00 5.00000000e-01]
 [1.00000000e+00 0.00000000e+00 1.00000000e+00]]
[[ 1.00000000e+00  0.00000000e+00 -2.22044605e-16]
 [ 0.00000000e+00  1.00000000e+00  0.00000000e+00]
 [ 2.00754365e-16  0.00000000e+00  1.00000000e+00]]

不考虑浮点数产生的误差,我们有

(b)不可能,原因如下:

由条件可得

但是因为

所以

这就产生了矛盾。

(c)不可能,如果$B$的第三列为$0$,那么$AB$的第三列为$0$,与条件矛盾。

(d)记

注意到

所以

注意到此时有

所以只要考虑

求出满足条件的$B$,使得

即可。又因为$A_1$的$2,3$列为$0$,所以只要考虑

求$B_2​$,使得

求解该方程组得到

最终的结果为

最后验证结果:

#### (d)
B = np.array([
        [0, 0, 0.5],
        [0, 0.5, 0],
        [0, 0.5, 0],
        [0, 0, 0.5],
        [1, 0, 1]
        ])
print(A.dot(B))
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

(e)此时

那么

所以

这就产生了矛盾。

(f)此时

那么

所以可以取

验证结果:

#### (f)
B = np.array([
        [0, 0, 0],
        [0, 0, 0],
        [0, 1, 0],
        [0, 0, 1],
        [1, 0, 1]
        ])
print(A.dot(B))
[[1 0 0]
 [0 1 0]
 [0 0 1]]

4.1

将$U$扩张为正交矩阵:

那么

注意到

因此

所以

当且仅当

时等号成立,由$x​$的任意性可得必然有$k=n​$。

4.2

(a)

(b)

(c)由正交矩阵的特点可得

所以不妨设

又因为

所以

所以

如果

那么

此时为旋转矩阵。

如果

那么

此时为反射矩阵。

4.3

(a)

(b)

(c)

(d)$\forall z_0 =Pz \in \mathcal{R}(P)​$,那么

当且仅当$z=x​$时等号成立。

5.1

因为

所以

由上一题可知$P​$为对称矩阵,因此

6.9

A = zeros(N, n_pixels^2);
for i = 1 : N
    data = line_pixel_length(lines_d(i),lines_theta(i),n_pixels);
    data = data(:);
    A(i, :) = data;
end

% v = inv(A' * A) * A' * y;
v = A \ y;
X = reshape(v, n_pixels, n_pixels);
figure(1)      % display the original image
colormap gray
imagesc(X)
axis image

补充题

1

N = 40;
x =[0.0197;    0.0305;    0.0370;    0.1158;    0.2778;    0.3525;    0.3974;    0.3976;    0.4053;    0.4055;    0.4623;    0.5444;    0.7057;    0.8114;    0.8205;    0.8373;    0.8894;    0.8902;    0.9129;    0.9320;    0.9720;    1.0503;    1.2076;    1.2137;    1.2309;    1.3443;    1.4764;    1.4936;    1.5242;    1.5839;    1.6263;    1.6428;    1.6924;    1.7826;    1.7873;    1.8338;    1.8436;    1.8636;    1.8709;    1.9003];
y =[-0.0339;   -0.1022;   -0.0165;   -0.0532;   -0.2022;   -0.1149;   -0.1310;   -0.1924;   -0.1768;   -0.1845;   -0.2210;   -0.1994;   -0.3058;   -0.1916;   -0.3097;   -0.3011;   -0.2657;   -0.3162;   -0.3295;   -0.3710;   -0.3247;   -0.4274;   -0.3756;   -0.3323;   -0.4545;   -0.4242;   -0.4710;   -0.6230;   -0.6332;   -0.5694;   -0.6458;   -0.6025;   -0.6313;   -0.7051;   -0.6799;   -0.7489;   -0.7310;   -0.8675;   -0.8146;   -0.8469];
    
% (a)
x1 = [x, ones(N, 1)];
% A1 = inv(x1' * x1) * x1' * y;
A1 = x1 \ y

% (b)
x2 = [x.^3, x.^2, x, ones(N, 1)];
% A3 = inv(x2' * x2) * x2' * y;
A2 = x2 \ y

输出为

A1 =
   -0.3881
    0.0014
A2 =
   -0.1476
    0.3045
   -0.4632
   -0.0320

2

N = 1000;
R1 = zeros(N, 1);
R2 = zeros(N, 1);

for i = 1:N
    % (a)生成数据
    A = randn(50, 20);
    v = 0.1 * randn(50, 1);
    x = randn(20, 1);
    y = A * x + v;

    % (b)最小二乘
    xls = A \ y;
    r1 = norm(xls - x) / norm(x);

    % (c)
    y_trunc = y(1:20, :);
    A_trunc = A(1:20, :);
    xjem = A_trunc \ y_trunc;
    r2 = norm(xjem - x) / norm(x);
    
    R1(i) = r1;
    R2(i) = r2;
end

mean(R1)
mean(R2)
ans =
    0.0189
ans =
    0.8128